package com.atguigu.springbootdemo.controller;

import com.atguigu.springbootdemo.beans.Employee;
import com.atguigu.springbootdemo.service.EmployeeService;
import com.atguigu.springbootdemo.service.EmployeeServiceImpl;
import com.atguigu.springbootdemo.service.EmployeeServiceImpl2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Created by Smexy on 2023/3/28
 *
 *     1.先声明接口，再写实现。
 *          不声明接口行不行?
 *              类是工具类，可以！
 *              业务类，不行！
 *
 *          同一项业务在不同的App版本，需要有不同的实现。
 *              登录业务
 *                  1.0   用户名+密码验证
 *                  2.0   使用手机验证码
 *                  3.0   使用生物特征： 指纹，刷脸
 *
 *          好处是可以使用多态，降低运维成本。
 *
 *
 *     2.Mapper中的方法和Service中的方法是一样的。能不能省略Mapper!
 *
 *          不能！
 *          在这个项目中，是巧合！
 *          Mapper负责读写数据库！
 *          Servcie负责整个业务流程的实现，如果在整个业务流程中，需要读写数据库了，应该是调用Mapper，
 *              而不是把Mapper的逻辑编写在Servce中，不利于维护！
 *              没有分层解耦！
 *
 *
 */
@RestController
public class EmployeeController
{

    // employeeService = new EmployeeServiceImpl();
    /*
        基于IOC，任何对象，都可以从容器中去取。
             @Service：    new EmployeeServiceImpl();  需要通知容器，在容器中准备EmployeeServiceImpl对象。
              @Autowired:  employeeService =
                    哪个属性标注了 @Autowired，自动从容器中找指定的类型，进行赋值。找不到，就报错！
     */
    @Autowired
    private EmployeeService employeeService;
    //private EmployeeServiceImpl2 employeeService;

    /*
        http://localhost:63342/emp? op=select  & id=1 & lastname= & gender= & email=
     */
    @RequestMapping(value = "/emp")
    public Object handle1(String op,Integer id,String lastname,String gender,String email ){

        //封装数据模型
        Employee employee = new Employee(id, lastname, gender, email);

        switch (op){
            case "select":  if (id == null){
                return "id非法!";
            }else {
                Employee e = employeeService.getEmpById(id);
                return e == null ? "查无此人" : e;
            }

            case "delete":if (id == null){
                return "id非法!";
            }else {
                employeeService.deleteEmpById(id);
                return "ok";
            }

            case "insert": employeeService.insertEmployee(employee);
                return "ok";

            case "update": if (id == null){
                return "id非法!";
            }else {
                employeeService.updateEmployee(employee);
                return "ok";
            }

            default: return "ok";
        }

    }

    @RequestMapping(value = "/getAllEmp")
    public Object handle2(){
        List<Employee> all = employeeService.getAll();
        return all;
    }

    @RequestMapping(value = "/getAds")
    public Object handle3(){

        return employeeService.getAds();
    }


}
